package com.example.design.bilibili.mediator;

import java.util.HashMap;
import java.util.Map;

public class ConcreteMediator extends Mediator{

    //集合，放入所有同事对象
    private Map<String,Colleague> colleagueMap;

    private Map<String,String> interMap;

    public ConcreteMediator() {
        colleagueMap = new HashMap<>();
        interMap = new HashMap<>();
    }

    @Override
    public void Register(String colleagueName, Colleague colleague) {

        colleagueMap.put(colleagueName,colleague);

        if(colleague instanceof Alarm){
            interMap.put("Alarm",colleagueName);
        }else if(colleague instanceof CoffeeMachine){
            interMap.put("CoffeeMachine",colleagueName);
        }else if(colleague instanceof TV){
            interMap.put("TV",colleagueName);
        }else if(colleague instanceof Curtains){
            interMap.put("Curtains",colleagueName);
        }
    }

    //具体中介者的核心方法
    //根据到得到的具体消息，完成对应任务
    //中介者在这个方法，协调各个具体的同事对象，完成任务
    @Override
    public void GetMessage(int stateChange, String colleagueName) {

        //处理闹钟发出的消息
        if(colleagueMap.get(colleagueName) instanceof Alarm){
            if(stateChange == 0){
                ((CoffeeMachine)(colleagueMap.get(interMap.get("CoffeeMachine")))).startCoffee();
                ((TV)(colleagueMap.get(interMap.get("TV")))).startTV();
            }else if(stateChange == 1){
                ((TV)(colleagueMap.get(interMap.get("TV")))).stopTV();
            }
        }else if(colleagueMap.get(colleagueName) instanceof CoffeeMachine){
            ((Curtains)(colleagueMap.get(interMap.get("Curtains")))).upCurtains();
        }else if(colleagueMap.get(colleagueName) instanceof TV){//如果TV发现消息

        }else if(colleagueMap.get(colleagueName) instanceof Curtains){
            //如果是以窗帘发出的消息，这里处理
        }
    }

    @Override
    public void SendMessage() {

    }
}
